package com.ruoyi.system.service;

import com.ruoyi.system.domain.SysRefreshToken;

import java.util.Date;
import java.util.List;

/**
 * Refresh Token Service接口
 *
 * @author ruoyi
 */
public interface ISysRefreshTokenService
{
    /**
     * 查询Refresh Token
     *
     * @param id Refresh Token主键
     * @return Refresh Token
     */
    public SysRefreshToken selectSysRefreshTokenById(Long id);

    /**
     * 根据用户ID查询有效的Refresh Token
     *
     * @param userId 用户ID
     * @return Refresh Token
     */
    public SysRefreshToken selectByUserId(Long userId);

    /**
     * 根据token值查询Refresh Token
     *
     * @param refreshToken token值
     * @return Refresh Token
     */
    public SysRefreshToken selectByToken(String refreshToken);

    /**
     * 查询Refresh Token列表
     *
     * @param sysRefreshToken Refresh Token
     * @return Refresh Token集合
     */
    public List<SysRefreshToken> selectSysRefreshTokenList(SysRefreshToken sysRefreshToken);

    /**
     * 新增Refresh Token
     *
     * @param sysRefreshToken Refresh Token
     * @return 结果
     */
    public int insertSysRefreshToken(SysRefreshToken sysRefreshToken);

    /**
     * 修改Refresh Token
     *
     * @param sysRefreshToken Refresh Token
     * @return 结果
     */
    public int updateSysRefreshToken(SysRefreshToken sysRefreshToken);

    /**
     * 批量删除Refresh Token
     *
     * @param ids 需要删除的Refresh Token主键集合
     * @return 结果
     */
    public int deleteSysRefreshTokenByIds(Long[] ids);

    /**
     * 删除Refresh Token信息
     *
     * @param id Refresh Token主键
     * @return 结果
     */
    public int deleteSysRefreshTokenById(Long id);

    /**
     * 保存或更新用户的Refresh Token
     *
     * @param userId 用户ID
     * @param refreshToken token值
     * @param expiresAt 过期时间
     * @return 结果
     */
    public int saveOrUpdateRefreshToken(Long userId, String refreshToken, Date expiresAt);

    /**
     * 使用户的所有Refresh Token失效
     *
     * @param userId 用户ID
     * @return 结果
     */
    public int invalidateUserRefreshTokens(Long userId);

    /**
     * 验证Refresh Token是否有效
     *
     * @param userId 用户ID
     * @param refreshToken token值
     * @return 是否有效
     */
    public boolean isValidRefreshToken(Long userId, String refreshToken);

    /**
     * 清理过期的Refresh Token
     *
     * @return 清理的数量
     */
    public int cleanExpiredRefreshTokens();

    /**
     * 生成Refresh Token
     *
     * @param userId 用户ID
     * @param expireSeconds 过期时间(秒)
     * @return Refresh Token
     */
    public String generateRefreshToken(Long userId, long expireSeconds);
}